var async=require('async');

//创建一个包括一组异步函数的函数集合，每个函数会消费上一次函数的返回值。把f(),g(),h()异步函数，组合成f(g(h()))的形式，通过callback得到返回值。
//每个函数都只支持一个参数和一个回调函数，中间的参数会忽略（见源代码）
var f= function (n,s,cb) {
    console.log('f enter:',n);
    setTimeout(function () {
        cb(null,n+10,s);
    });
};

var g= function (n,s, cb) {
    console.log('g enter:',n);
    //if(100==n)return cb('G error');
    setTimeout(function () {
        cb(null,n-10, s.toLowerCase());
    });
};

var h= function (n,s, cb) {
    console.log('h enter:',n);
    setTimeout(function () {
        cb(null,n*10, s.toUpperCase());
    });
};

var fgh=async.compose(f,g,h);

console.log(fgh.toString());//源代码


fgh(10,'a', function (err, result) {
    console.log('Err:',err);
    console.log('result:',result);
});
